package com.example.hms.service.servicelmpl;

import com.example.hms.dao.DashboardDao;
import com.example.hms.entity.Dashboard;
import com.example.hms.service.DashboardService;
import com.example.hms.util.Result;
import com.example.hms.util.ResultSubmit;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

@Service
public class DashboardServiceImpl implements DashboardService {
    @Resource
    private DashboardDao dashboardDao;

    //    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    @Override
    public Result selectRoomNumber() {
        return ResultSubmit.success(dashboardDao.selectRoomNumber());
    }

    @Override
    public Result selectLiveNumber() {
        return ResultSubmit.success(dashboardDao.selectLiveNumber());
    }

    @Override
    public Result selectRevenue(String month) {
        // 将月份字符串格式化为"YYYY-MM-DD HH:MM:SS"形式
        month = month + "-01 00:00:00";
        return ResultSubmit.success(dashboardDao.selectRevenue(month));
    }

    @Override
    public Result selectRevenueByMonth(String month) {
        // 创建一个用于存储Dashboard对象的列表
        List<Dashboard> selcetMonthData = new ArrayList<>();
        for (int i = 0; i <= 5; i++) {
            // 创造一个新的对象
            Dashboard monthlyIncome = new Dashboard();
            // 设置月份，传入的month参数没有变化，可能存在逻辑错误
            monthlyIncome.setMonth(month);
            // 查询并设置该月的收入数据，注意：这里每次循环都使用相同的month参数，可能导致所有对象的money值相同
            monthlyIncome.setMoney(dashboardDao.selectRevenue(month + "-01 00:00:00"));
            // 将当前Dashboard对象添加到列表中
            selcetMonthData.add(monthlyIncome);

            // 月份处理
            month = monthUpdate2(month);
        }
        return ResultSubmit.success(selcetMonthData);
    }

    // 根据传入的月份字符串，返回上一个月的月份字符串
    private String monthUpdate1(String month) {
        // 定义日期格式为 "yyyy-MM"
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
        Date date = null;
        try {
            // 将传入的月份字符串解析为Date对象
            date = format.parse(month);
        } catch (ParseException e) {
            // 如果解析失败，打印异常堆栈信息
            e.printStackTrace();
        }
        // 获取Calendar实例
        Calendar calendar = Calendar.getInstance();
        // 设置Calendar的时间为解析得到的Date对象
        calendar.setTime(date);
        // 在Calendar的时间基础上减去一个月
        calendar.add(Calendar.MONTH, -1);
        // 将计算后的时间重新格式化为 "yyyy-MM" 格式的字符串并返回
        return format.format(calendar.getTime());
    }

    private String monthUpdate2(String month) {
        // 初始化StringBuffer对象，用于处理日期字符串
        StringBuffer stringBuffer = new StringBuffer(month);
        // 从日期字符串中提取年份部分
        int year = Integer.parseInt(stringBuffer.substring(0,4));
        // 从日期字符串中提取月份部分
        int month1 = Integer.parseInt(stringBuffer.substring(5,7));
        // 实现月份减一s
        if (month1 == 1) {
            // 如果月份为1月，则年份减一，月份设置为12
            year = year - 1;
            month1 = 12;
        } else {
            month1 = month1 - 1;
        }
        // 如果月份小于10，则前面补0
        if (month1 < 10) {
            return year + "-0" + month1;
        }else {
            return year + "-" + month1;
        }
    }
}
